/**
 * Created by PanJiaChen on 16/11/18.
 */

/**
 * Parse the time to string
 * @param {(Object|string|number)} time
 * @param {string} cFormat
 * @returns {string | null}
 */
export function parseTime(time, cFormat) {
	if (arguments.length === 0 || !time) {
		return null
	}
	const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}'
	let date
	if (typeof time === 'object') {
		date = time
	} else {
		if (typeof time === 'string') {
			if (/^[0-9]+$/.test(time)) {
				// support "1548221490638"
				time = parseInt(time)
			} else {
				// support safari
				// https://stackoverflow.com/questions/4310953/invalid-date-in-safari
				time = time.replace(new RegExp(/-/gm), '/')
			}
		}

		if (typeof time === 'number' && time.toString().length === 10) {
			time = time * 1000
		}
		date = new Date(time)
	}
	const formatObj = {
		y: date.getFullYear(),
		m: date.getMonth() + 1,
		d: date.getDate(),
		h: date.getHours(),
		i: date.getMinutes(),
		s: date.getSeconds(),
		a: date.getDay()
	}
	const time_str = format.replace(/{([ymdhisa])+}/g, (result, key) => {
		const value = formatObj[key]
		// Note: getDay() returns 0 on Sunday
		if (key === 'a') {
			return [ '日', '一', '二', '三', '四', '五', '六' ][value]
		}
		return value.toString().padStart(2, '0')
	})
	return time_str
}

/**
 * @param {number} time
 * @param {string} option
 * @returns {string}
 */
export function formatTime(time, option) {
	if (('' + time).length === 10) {
		time = parseInt(time) * 1000
	} else {
		time = +time
	}
	const d = new Date(time)
	const now = Date.now()

	const diff = (now - d) / 1000

	if (diff < 30) {
		return '刚刚'
	} else if (diff < 3600) {
		// less 1 hour
		return Math.ceil(diff / 60) + '分钟前'
	} else if (diff < 3600 * 24) {
		return Math.ceil(diff / 3600) + '小时前'
	} else if (diff < 3600 * 24 * 2) {
		return '1天前'
	}
	if (option) {
		return parseTime(time, option)
	} else {
		return d.getMonth() + 1 + '月' + d.getDate() + '日' + d.getHours() + '时' + d.getMinutes() + '分'
	}
}

/**
 * @param {string} url
 * @returns {Object}
 */
export function param2Obj(url) {
	const search = decodeURIComponent(url.split('?')[1]).replace(/\+/g, ' ')
	if (!search) {
		return {}
	}
	const obj = {}
	const searchArr = search.split('&')
	searchArr.forEach((v) => {
		const index = v.indexOf('=')
		if (index !== -1) {
			const name = v.substring(0, index)
			const val = v.substring(index + 1, v.length)
			obj[name] = val
		}
	})
	return obj
}

export function todo(arr) {
	/*
  1、循环  查找 pid===id  相同的
  2、找到后：需要将 pid这一项添加到id的这一项变成他的子children
   */
	var newArr = []
	var map = {}
	arr.forEach((item) => {
		item.children = []
		map[item.id] = item //   {29:{ id: '29', pid: '', name: '总裁办' },2c:{}}

		/* {
      29:{ id: '29', pid: '', name: '总裁办' },
      2c: { id: '2c', pid: '', name: '财务部' },
      2d: { id: '2d', pid: '2c', name: '财务核算部' },
      2f: { id: '2f', pid: '2c', name: '薪资管理部' },
      d2: { id: 'd2', pid: '', name: '技术部' },
      d3: { id: 'd3', pid: 'd2', name: 'Java研发部' }

    }

     */
	})

	arr.forEach((item2) => {
		var parent = map[item2.pid] //  查找的是有根节点
		if (parent) {
			//  表示有子children
			/*  parent
      { id: 'd2', pid: '', name: '技术部' },
      { id: '2c', pid: '', name: '财务部' },
       */
			parent.children.push(item2)
			//  { id: 'd2', pid: '', name: '技术部',children:[{ id: 'd3', pid: 'd2', name: 'Java研发部' }] },
		} else {
			//  没有筛选到柚子节点的  没有筛选到pid 和id相同的
			newArr.push(item2)
		}
	})
	return newArr
}

/* 处理excel和浏览器的事件格式转换 */
export function formatExcelDate(numb, format) {
	const time = new Date((numb - 25567) * 24 * 3600000 - 5 * 60 * 1000 - 43 * 1000 - 24 * 3600000 - 8 * 3600000)
	time.setYear(time.getFullYear())
	const year = time.getFullYear() + ''
	const month = time.getMonth() + 1 + ''
	const date = time.getDate() + ''
	if (format && format.length === 1) {
		return year + format + month + format + date
	}
	return year + (month < 10 ? '0' + month : month) + (date < 10 ? '0' + date : date)
}
